/**
 * loadJS 异步加载远程JS
 * @constructor
 * @param {string} src - 必填，需要加载的URL路径
 * @param {string} keyName - 必填，唯一key和JS返回的全局的对象名
 * @param {string} callbackName - 非必填，如果远程JS有callback，则可更有效的判断是否完成加载
 */
export function loadJS (src, keyName, callbackName) {
  return new Promise((resolve, reject) => {
    let has = document.head.querySelector("script[loadKey="+keyName+"]")
    if(has){
      return resolve(window[keyName])
    }
    let script = document.createElement("script")
    script.type = "text/javascript"
    script.src = src
    script.setAttribute("loadKey", keyName)
    document.head.appendChild(script)
    script.onload = () => {
      if(callbackName){
        window[callbackName] = () => {
          return resolve(window[keyName])
        }
      }else{
        setTimeout(()=>{
          return resolve(window[keyName])
        },50)
      }
    }
    script.onerror = (err) => {
      return reject(err)
    }
  })
}

/**
 * loadCSS 异步加载远程css
 * @constructor
 * @param {string} src - 必填，需要加载的URL路径
 * @param {string} keyName - 必填，唯一key
 */
export function loadCSS (src, keyName) {
  return new Promise((resolve, reject) => {
    let has = document.head.querySelector("link[loadKey="+keyName+"]")
    if(has){
      return resolve()
    }
    let link = document.createElement('link')
    link.rel = "stylesheet"
    link.href = src
    link.setAttribute("loadKey", keyName)
    document.head.appendChild(link)
    link.onload = () => {
      return resolve()
    }
    link.onerror = (err) => {
      return reject(err)
    }
  })
}
